package com.aasa.siccosap.dao;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import org.apache.log4j.Logger;

import oracle.jdbc.OracleTypes;

import com.aasa.siccosap.bean.DepositoBancario;
import com.aasa.siccosap.bean.PagoEfectivo;
import com.aasa.siccosap.bean.ParametrosDeposito;
import com.aasa.siccosap.bean.SaldoBean;
import com.aasa.siccosap.util.Constantes;

public class PagoEfectivoDAO extends accesoDao{

	static Logger logger = Logger.getLogger("PagoEfectivoDAO.class");
	public PagoEfectivoDAO()	throws accesoDaoException {
		super();
	}
	
	public PagoEfectivoDAO(DataSource dataSource) {
		super(dataSource);
	}
	
	
	public List<PagoEfectivo> consultarPagosEfectivo(
			ParametrosDeposito parametros) {
		ResultSet rs = null;
        this.av_message = null;
        this.storedProcedure = "begin SICCOSPK_PROYECTO.SICCOSSP_CONSULTA_PAGOS_EFECT(?,?,?,?,?); end;";
        List<PagoEfectivo> consultaPagosEfectivo = new ArrayList<PagoEfectivo>();
                
        try{
                this.conn = dataSource.getConnection();
                this.stmt = this.conn.prepareCall(storedProcedure);
                              
                configuraParametrosPagosEfectivo(parametros);
                
                this.stmt.execute();

                //Se obtiene la respuesta error/exito del stored
                this.av_message = (String)stmt.getObject(1);
                	
                    if(this.av_message.trim().toUpperCase().endsWith(Constantes.NO_ERRORS)){
                        //Se obtiene el objeto del cursor
                        rs = (ResultSet)stmt.getObject(2);
                        while(rs.next()){
                        	PagoEfectivo registroPagoEfectivo = creaRegistroConsultaPagosEfectivo(rs);
                        	consultaPagosEfectivo.add(registroPagoEfectivo);
                        }                        
                }else{                	
                	return null;                    
                }

        }catch (Exception e){
                e.printStackTrace();                
                return null;
        }finally{
        		close(this.conn, rs, stmt);
        }
                
        return(consultaPagosEfectivo);
             
	}

	private PagoEfectivo creaRegistroConsultaPagosEfectivo(ResultSet rs) throws SQLException{
		PagoEfectivo bean = new PagoEfectivo();
		
		bean.setStrPb_ejercicio(rs.getString("EJERCICIO_FISCAL"));
		bean.setStrPb_periodo(rs.getString("PERIODO_FISCAL"));
		bean.setObjPb_fecha(rs.getDate("FECHA_DEPOSITO_BD"));
		bean.setStrPb_tipo(rs.getString("TIPO_DOC"));
		bean.setStrPb_referencia(rs.getString("REFERENCIA"));
		bean.setStrPb_moneda(rs.getString("MONEDA"));
		bean.setDblPb_importeSoles(rs.getDouble("SOLES"));
		bean.setDblPb_importeDolares(rs.getDouble("DOLARES"));
		
		
		System.out.println(bean.getDblPb_importeDolares()+ "   monto dolares");
		return bean;
	}

	private CallableStatement configuraParametrosPagosEfectivo(ParametrosDeposito parametros) throws SQLException {
		stmt.registerOutParameter(1, OracleTypes.VARCHAR);               
        stmt.registerOutParameter(2, OracleTypes.CURSOR);
            	
        stmt.setString(3, parametros.getStrPb_codigoCliente());
                                            
        stmt.setString(4,parametros.getStrPb_ejercicio());
        stmt.setString(5,parametros.getStrPb_periodo());
        
        //Estos dos no se usan actualmente (en BD los asigna a '001')
      //  stmt.setString(6,"");
     //   stmt.setString(7,"");
        
		return stmt;
		
	}

}
